home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Games / xblockbuster / xblockbuster.h < prev    next >
C/C++ Source or Header  |  1995-05-03  |  5KB  |  204 lines

  1. /*
  2.  * File:       xblockbuster.h
  3.  * Author:     Eric Van Gestel
  4.  * X11 Support by: Mark Wedel
  5.  * For:                xblockbuster
  6.  *
  7.  */
  8.  
  9. /* file paths are defined at the end of this file */
  10.  
  11. #include <stdio.h>
  12. #include <pwd.h>
  13. /*#include <sys/file.h>
  14. #include <ctype.h>*/
  15. #include <math.h>
  16. #include <X11/Xlib.h>
  17. #include <X11/Xutil.h>
  18. #include <X11/Xos.h>
  19. #include <X11/Xatom.h>
  20.  
  21.  
  22. /*
  23.  * #define M_PI                3.14159265358979323846
  24.  * #define M_PI_2      1.57079632679489661923
  25.  * #define M_PI_4      0.78539816339744830962
  26.  */
  27. #define M_PI_3_4       2.35619449019234492885
  28. #define M_SQRT2_2      0.70710678118654752440
  29. #define NEAR_HORIZONTAL        0.7    /* < M_PI_4 */
  30.  
  31. Display        *display;
  32. Window        win;
  33. GC        gc, gc_erase, gc_xor,gc_color;
  34. XFontStruct    *font_info;
  35. int        screen_num, font_width, font_height;
  36.  
  37. /*** windowing objects ***/
  38.  
  39. #define BORDER         50
  40. #define MSG_HEIGHT     font_height*2 + 4
  41.  
  42. #define MAX_ROW                42
  43. #define MAX_COL                11
  44.  
  45. /* upper left corner of brick in pixels */
  46. #define COL_X( col )   (col) ? (col) * 64 - 48 + BORDER : BORDER
  47. #define ROW_Y( row )   (row) * 16 + BORDER
  48.  
  49. /* brick coordinates */
  50. #define X_COL( x )     ( (int)(x) - BORDER + 48 ) / 64
  51. #define Y_ROW( y )     ( (int)(y) - BORDER ) / 16
  52.  
  53. #define STAGE_HEIGHT_IN_PIXELS ( ( MAX_ROW + 1 ) * 16 + 2 * BORDER )
  54. #define STAGE_WIDTH_IN_PIXELS  ( ( MAX_COL - 1 ) * 64 + 2 * ( BORDER + 16 ) )
  55.  
  56.  
  57. /*** messages ***/
  58.  
  59.  
  60. #define OFFSET_BALLS   20
  61. #define OFFSET_SCORE   250
  62. #define OFFSET_SPEED   550
  63.  
  64.  
  65. /*** active objects ***/
  66.  
  67. #define NO_BALL        0
  68. #define NE     1
  69. #define NW     2
  70. #define SW     3
  71. #define SE     4
  72.  
  73. #ifndef FALSE
  74. #define FALSE  0
  75. #endif
  76. #ifndef TRUE
  77. #define TRUE   1
  78. #endif
  79.  
  80. #define HORIZONTAL     1
  81. #define VERTICAL       2
  82.  
  83. #define INIT_BALLS     3
  84. #define LOOP_MAX       100
  85.  
  86. #define INIT_SPEED     3.0
  87. #define MAX_SPEED      8.0
  88. #define SPEED_LIMIT    12.0
  89. #define SPEED_INCR     0.2
  90. #define SPEED_INCR_2   0.1    /* SPEED_INCR / 2 */
  91. #define SPEED_RESOLUTION       60    /* SPEED_LIMIT / SPEED_INCR */
  92. #define SPEED_RESOLUTION_FACTOR        5.0    /* SPEED_RESOLUTION /
  93.                          * SPEED_LIMI
  94.                          */
  95.  
  96. #define NUM_BRICK_TYPES    37
  97.  
  98. /* foreground/background colors for each of the bricks - MSW */
  99. struct    COLOR {
  100.     unsigned long    fg, bg;
  101. } brick_color[NUM_BRICK_TYPES+1];
  102.  
  103. /* the stage is a two
  104.  * dimensional array of
  105.  * bricks */
  106.  
  107. struct Brick {
  108.     char            code;    /* Q.V. map_codes */
  109.     short           nhits;
  110. }               stage[MAX_ROW + 1][MAX_COL + 1];
  111.  
  112. #define IS_HIT_BRICK( code )   code > '0' && code <= '9'
  113.  
  114. struct Ball {
  115.     int             quadrant;    /* enumeration { NO_BALL, NE, NW, SW,
  116.                      * SE } */
  117.     double          angle;    /* range -M_PI_4..NEAR_HORIZONTAL */
  118.     /*
  119.      * NW -P4|-P4 NE +NH | +NH >>>>>>+<<<<<<  (gap to avoid infinite
  120.      * horizontal bounce loops) +NH | +NH SW -P4|-P4 SE
  121.      */
  122.     int             row, col;    /* coordinates on the stage */
  123.     double          x, y;    /* coordinates in pixels */
  124.     double          speed, x_speed, y_speed;    /* motion per update in
  125.                              * pixels */
  126.     /*
  127.      * INVARIANT: x_speed == speed * cos( true_angle ) y_speed == speed *
  128.      * sin( true_angle )
  129.      */
  130. }               ball1, ball2, ball3;
  131.  
  132. int             launch_quadrant;/* enumeration { NE, NW } */
  133. int             launch_row, launch_col;
  134. double          launch_x, launch_y;
  135. int             emit_row, emit_col;
  136.  
  137. #define MIN_PALLET_LENGTH      12
  138. #define SHORT_PALLET_LENGTH    16
  139. #define LONG_PALLET_LENGTH     99
  140. #define MAX_PALLET_LENGTH      99
  141. #define MAX_PALLET_HEIGHT      999
  142. #define PALLET_INCR    100
  143. #define PALLET_DENOMINATOR     20000
  144. #define PALLET_MIN_Y   ROW_Y( MAX_ROW - 9 )
  145. #define PALLET_MAX_Y   ROW_Y( MAX_ROW - 1 )
  146.  
  147. int             pallet_lengthI;    /* range MIN_PALLET_LENGTH..MAX_PALLET_LENGTH */
  148. int             pallet_heightI;    /* range pallet_lengthI..MAX_PALLET_HEIGHT */
  149. int             pallet_xI;    /* range 0..STAGE_WIDTH_IN_PIXELS */
  150. int             pallet_yI;    /* range PALLET_MAX_Y+4..PALLET_MIN_Y-12 */
  151. int             pallet_row;    /* range MAX_ROW-1..MAX_ROW-9 */
  152. double          pallet_length, pallet_height, pallet_x, pallet_y;
  153.  
  154. /*
  155.  * INVARIANT:
  156.  *     pallet_* == (double) pallet_*I;
  157.  *     pallet_width == 2 * pallet_length
  158.  *     pallet_height >= pallet_length >= ABS( excentricity )
  159.  *       =>  atan2( excentricity, pallet_height ) range -M_PI_4..M_PI_4
  160.  */
  161. int             mouse_yI;    /* range 0..STAGE_HEIGHT_IN_PIXELS *//* <HC> */
  162.  
  163. int             nb_stages, stage_nb, balls_left, score, score_incr, nbricks, loop_nhits, pallet_modif;
  164. double          launch_speed;
  165.  
  166. #define NAME_LENGTH    20
  167. char            stage_name[NAME_LENGTH];
  168.  
  169. #define MAX_NB_STAGES  100
  170. int             stages[MAX_NB_STAGES];
  171.  
  172. struct Brick   *last_busted_brick;    /* NULL == none so far */
  173. char            last_busted_code;
  174. int             last_busted_row, last_busted_col;
  175.  
  176.  
  177.  
  178. /*** score and stages files ***/
  179.  
  180. #define PATH_LENGTH    64
  181.  
  182. char    *login;
  183. char    playground[PATH_LENGTH];
  184.  
  185. #ifndef STAGEDIR
  186. #define STAGEDIR    "/usr/games/lib/blockbuster"
  187. #endif
  188.  
  189. #define SCOREFILE      "%s/scores"
  190. #define NB_SCORES      12
  191. #define USER_SCORES    3
  192.  
  193. #define NB_STAGESFILE  "%s/nb_stages"
  194. #define STAGEFILE      "%s/stage%d"
  195. #define STAGEFILE_LENGTH       PATH_LENGTH
  196.  
  197. #define SAVEFILE       "%s/save/%s"
  198. #define SAVEFILE_LENGTH        PATH_LENGTH
  199.  
  200. /* Timer information */
  201.  
  202. #define ITIMER_DELAY    5000
  203.  
  204.